package com.lxy.shiro.service.impl;

import com.lxy.shiro.model.User;
import com.lxy.shiro.service.UserService;
import org.apache.shiro.crypto.hash.SimpleHash;
import org.apache.shiro.util.ByteSource;
import org.springframework.stereotype.Service;

import java.util.*;

/**
 * @Author: lxy
 * @Date: 2019/6/27 15:58
 * @Desc: describe this class
 */
@Service
public class UserServiceImpl implements UserService {
    /**
     * 模拟查询返回用户信息
     * @param uname
     * @return
     */
    @Override
    public User findUserByName(String uname){
        User user = new User();
        user.setUname(uname);
        user.setNick(uname+"NICK");
        //密码明文是123456
        user.setPwd("J/ms7qTJtqmysekuY8/v1TAS+VKqXdH5sB7ulXZOWho=");
        //加密密码的盐值
        user.setSalt("wxKYXuTPST5SG0jMQzVPsg==");
        //随机分配一个id
        user.setUid(UUID.randomUUID().toString().replaceAll("-",""));
        user.setCreated(new Date());
        return user;
    }

    @Override
    public boolean register(String username, String password) {
        // 生成uuid
        String id = UUID.randomUUID().toString().replaceAll("-","");

        // 将用户名作为盐值
        ByteSource salt = ByteSource.Util.bytes(username);
        /*
         * MD5加密：
         * 使用SimpleHash类对原始密码进行加密。
         * 第一个参数代表使用MD5方式加密
         * 第二个参数为原始密码
         * 第三个参数为盐值，即用户名
         * 第四个参数为加密次数
         * 最后用toHex()方法将加密后的密码转成String
         * */
        String newPs = new SimpleHash("MD5", password, salt, 1024).toHex();

        User user = new User();
        user.setUid(id);
        user.setUname(username);
        user.setPwd(newPs);
        user.setCreated(new Date());

        // 看数据库中是否存在该账户
        User userInfo = findUserByName(username);
        Map<String, Object> userMapper = new HashMap<>();
        if(userInfo == null) {
            userMapper.put(user.getUid(),user);
            return true;
        }
        return false;
    }
}
